package main

import (
	"fmt"
)

func main() {
	//fileResponse, err := os.Open("D:\\go-study\\src\\lockTest\\test.go")
	//defer func(a int) { //匿名函数
	//	err := fileResponse.Close()
	//	fmt.Println("匿名函数参数", a)
	//	if err != nil {
	//		return
	//	}
	//}(100)
	//if err != nil {
	//	fmt.Println("openFile error", err)
	//}
	//
	//buf := make([]byte, 1024)
	//
	//n, err := fileResponse.Read(buf)
	//
	//fmt.Println("读取文件的实际长度", n)
	//
	//fmt.Println("读取的文件内容", string(buf))
	//interfaceTest()

}

// 接口
func interfaceTest() {
	var i interface{}

	arr := []string{"1", "2"}

	i = arr //接口可以接收任意类型参数

	fmt.Println("接口", i)

	//我们无法知道接口的实际类型,因为接口可以接收任意类型参数

	value, ok := i.(string)

	fmt.Println("value", value, "是否为int", ok)
	interfaceTypeUsage()
}

func interfaceTypeUsage() {
	arr := make([]interface{}, 3)

	arr[0] = 1
	arr[1] = "hello world"

	arr[2] = true

	for key, value := range arr {

		fmt.Printf("\n")
		switch v := value.(type) {
		case int:
			fmt.Printf("第%d位的数据%d类型是int,那v是什么呢%d", key, value, v)
			break
		case string:
			fmt.Printf("第%d位的数据%s类型是string,那v是什么呢%s", key, value, v)
			break
		case bool:
			fmt.Printf("第%d位的数据%v类型是boolean,那v是什么呢%v", key, value, v)
			break
		}

	}
	fmt.Printf("\n")

}
